home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 November / PCWNOV08.iso / Software / Freeware / Adobe Media Player 1.1 / adobe_media_player.air / AMP.swf / scripts / mx / resources / ResourceManagerImpl.as < prev   
Encoding:
Text File  |  2008-07-17  |  15.5 KB  |  490 lines

  1. package mx.resources
  2. {
  3.    import flash.events.Event;
  4.    import flash.events.EventDispatcher;
  5.    import flash.events.IEventDispatcher;
  6.    import flash.events.TimerEvent;
  7.    import flash.system.ApplicationDomain;
  8.    import flash.system.SecurityDomain;
  9.    import flash.utils.Timer;
  10.    import mx.core.mx_internal;
  11.    import mx.events.ModuleEvent;
  12.    import mx.events.ResourceEvent;
  13.    import mx.modules.IModuleInfo;
  14.    import mx.modules.ModuleManager;
  15.    import mx.utils.StringUtil;
  16.    
  17.    use namespace mx_internal;
  18.    
  19.    public class ResourceManagerImpl extends EventDispatcher implements IResourceManager
  20.    {
  21.       private static var instance:IResourceManager;
  22.       
  23.       mx_internal static const VERSION:String = "3.0.0.0";
  24.       
  25.       private var resourceModules:Object;
  26.       
  27.       private var initializedForNonFrameworkApp:Boolean = false;
  28.       
  29.       private var localeMap:Object;
  30.       
  31.       private var _localeChain:Array;
  32.       
  33.       public function ResourceManagerImpl()
  34.       {
  35.          localeMap = {};
  36.          resourceModules = {};
  37.          super();
  38.       }
  39.       
  40.       public static function getInstance() : IResourceManager
  41.       {
  42.          if(!instance)
  43.          {
  44.             instance = new ResourceManagerImpl();
  45.          }
  46.          return instance;
  47.       }
  48.       
  49.       public function get localeChain() : Array
  50.       {
  51.          return _localeChain;
  52.       }
  53.       
  54.       public function set localeChain(param1:Array) : void
  55.       {
  56.          _localeChain = param1;
  57.          update();
  58.       }
  59.       
  60.       [Bindable("change")]
  61.       public function getStringArray(param1:String, param2:String, param3:String = null) : Array
  62.       {
  63.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  64.          if(!_loc4_)
  65.          {
  66.             return null;
  67.          }
  68.          var _loc5_:* = _loc4_.content[param2];
  69.          var _loc6_:Array = String(_loc5_).split(",");
  70.          var _loc7_:int = int(_loc6_.length);
  71.          var _loc8_:int = 0;
  72.          while(_loc8_ < _loc7_)
  73.          {
  74.             _loc6_[_loc8_] = StringUtil.trim(_loc6_[_loc8_]);
  75.             _loc8_++;
  76.          }
  77.          return _loc6_;
  78.       }
  79.       
  80.       mx_internal function installCompiledResourceBundle(param1:ApplicationDomain, param2:String, param3:String) : void
  81.       {
  82.          var _loc4_:String = null;
  83.          var _loc5_:String = param3;
  84.          var _loc6_:int = int(param3.indexOf(":"));
  85.          if(_loc6_ != -1)
  86.          {
  87.             _loc4_ = param3.substring(0,_loc6_);
  88.             _loc5_ = param3.substring(_loc6_ + 1);
  89.          }
  90.          if(getResourceBundle(param2,param3))
  91.          {
  92.             return;
  93.          }
  94.          var _loc7_:* = param2 + "$" + _loc5_ + "_properties";
  95.          if(_loc4_ != null)
  96.          {
  97.             _loc7_ = _loc4_ + "." + _loc7_;
  98.          }
  99.          var _loc8_:Class = null;
  100.          if(param1.hasDefinition(_loc7_))
  101.          {
  102.             _loc8_ = Class(param1.getDefinition(_loc7_));
  103.          }
  104.          if(!_loc8_)
  105.          {
  106.             _loc7_ = param3;
  107.             if(param1.hasDefinition(_loc7_))
  108.             {
  109.                _loc8_ = Class(param1.getDefinition(_loc7_));
  110.             }
  111.          }
  112.          if(!_loc8_)
  113.          {
  114.             _loc7_ = param3 + "_properties";
  115.             if(param1.hasDefinition(_loc7_))
  116.             {
  117.                _loc8_ = Class(param1.getDefinition(_loc7_));
  118.             }
  119.          }
  120.          if(!_loc8_)
  121.          {
  122.             throw new Error("Could not find compiled resource bundle \'" + param3 + "\' for locale \'" + param2 + "\'.");
  123.          }
  124.          var _loc9_:ResourceBundle = ResourceBundle(new _loc8_());
  125.          _loc9_.mx_internal::_locale = param2;
  126.          _loc9_.mx_internal::_bundleName = param3;
  127.          addResourceBundle(_loc9_);
  128.       }
  129.       
  130.       [Bindable("change")]
  131.       public function getString(param1:String, param2:String, param3:Array = null, param4:String = null) : String
  132.       {
  133.          var _loc5_:IResourceBundle = findBundle(param1,param2,param4);
  134.          if(!_loc5_)
  135.          {
  136.             return null;
  137.          }
  138.          var _loc6_:String = String(_loc5_.content[param2]);
  139.          if(param3)
  140.          {
  141.             _loc6_ = StringUtil.substitute(_loc6_,param3);
  142.          }
  143.          return _loc6_;
  144.       }
  145.       
  146.       public function loadResourceModule(param1:String, param2:Boolean = true, param3:ApplicationDomain = null, param4:SecurityDomain = null) : IEventDispatcher
  147.       {
  148.          var errorHandler:Function;
  149.          var moduleInfo:IModuleInfo = null;
  150.          var resourceEventDispatcher:ResourceEventDispatcher = null;
  151.          var timer:Timer = null;
  152.          var timerHandler:Function = null;
  153.          var url:String = param1;
  154.          var updateFlag:Boolean = param2;
  155.          var applicationDomain:ApplicationDomain = param3;
  156.          var securityDomain:SecurityDomain = param4;
  157.          moduleInfo = ModuleManager.getModule(url);
  158.          resourceEventDispatcher = new ResourceEventDispatcher(moduleInfo);
  159.          var readyHandler:Function = function(param1:ModuleEvent):void
  160.          {
  161.             var _loc2_:* = param1.module.factory.create();
  162.             resourceModules[param1.module.url].resourceModule = _loc2_;
  163.             if(updateFlag)
  164.             {
  165.                update();
  166.             }
  167.          };
  168.          moduleInfo.addEventListener(ModuleEvent.READY,readyHandler,false,0,true);
  169.          errorHandler = function(param1:ModuleEvent):void
  170.          {
  171.             var _loc3_:ResourceEvent = null;
  172.             var _loc2_:String = "Unable to load resource module from " + url;
  173.             if(resourceEventDispatcher.willTrigger(ResourceEvent.ERROR))
  174.             {
  175.                _loc3_ = new ResourceEvent(ResourceEvent.ERROR,param1.bubbles,param1.cancelable);
  176.                _loc3_.bytesLoaded = 0;
  177.                _loc3_.bytesTotal = 0;
  178.                _loc3_.errorText = _loc2_;
  179.                resourceEventDispatcher.dispatchEvent(_loc3_);
  180.                return;
  181.             }
  182.             throw new Error(_loc2_);
  183.          };
  184.          moduleInfo.addEventListener(ModuleEvent.ERROR,errorHandler,false,0,true);
  185.          resourceModules[url] = new ResourceModuleInfo(moduleInfo,readyHandler,errorHandler);
  186.          timer = new Timer(0);
  187.          timerHandler = function(param1:TimerEvent):void
  188.          {
  189.             timer.removeEventListener(TimerEvent.TIMER,timerHandler);
  190.             timer.stop();
  191.             moduleInfo.load(applicationDomain,securityDomain);
  192.          };
  193.          timer.addEventListener(TimerEvent.TIMER,timerHandler,false,0,true);
  194.          timer.start();
  195.          return resourceEventDispatcher;
  196.       }
  197.       
  198.       public function getLocales() : Array
  199.       {
  200.          var _loc2_:String = null;
  201.          var _loc1_:Array = [];
  202.          for(_loc2_ in localeMap)
  203.          {
  204.             _loc1_.push(_loc2_);
  205.          }
  206.          return _loc1_;
  207.       }
  208.       
  209.       public function removeResourceBundlesForLocale(param1:String) : void
  210.       {
  211.          delete localeMap[param1];
  212.       }
  213.       
  214.       public function getResourceBundle(param1:String, param2:String) : IResourceBundle
  215.       {
  216.          var _loc3_:Object = localeMap[param1];
  217.          if(!_loc3_)
  218.          {
  219.             return null;
  220.          }
  221.          return _loc3_[param2];
  222.       }
  223.       
  224.       private function dumpResourceModule(param1:*) : void
  225.       {
  226.          var _loc2_:ResourceBundle = null;
  227.          var _loc3_:String = null;
  228.          for each(_loc2_ in param1.resourceBundles)
  229.          {
  230.             trace(_loc2_.locale,_loc2_.bundleName);
  231.             for(_loc3_ in _loc2_.content)
  232.             {
  233.             }
  234.          }
  235.       }
  236.       
  237.       [Bindable("change")]
  238.       public function getObject(param1:String, param2:String, param3:String = null) : *
  239.       {
  240.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  241.          if(!_loc4_)
  242.          {
  243.             return undefined;
  244.          }
  245.          return _loc4_.content[param2];
  246.       }
  247.       
  248.       public function addResourceBundle(param1:IResourceBundle) : void
  249.       {
  250.          var _loc2_:String = param1.locale;
  251.          var _loc3_:String = param1.bundleName;
  252.          if(!localeMap[_loc2_])
  253.          {
  254.             localeMap[_loc2_] = {};
  255.          }
  256.          localeMap[_loc2_][_loc3_] = param1;
  257.       }
  258.       
  259.       private function findBundle(param1:String, param2:String, param3:String) : IResourceBundle
  260.       {
  261.          supportNonFrameworkApps();
  262.          return param3 != null ? getResourceBundle(param3,param1) : findResourceBundleWithResource(param1,param2);
  263.       }
  264.       
  265.       [Bindable("change")]
  266.       public function getInt(param1:String, param2:String, param3:String = null) : int
  267.       {
  268.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  269.          if(!_loc4_)
  270.          {
  271.             return 0;
  272.          }
  273.          var _loc5_:* = _loc4_.content[param2];
  274.          return int(_loc5_);
  275.       }
  276.       
  277.       private function supportNonFrameworkApps() : void
  278.       {
  279.          if(initializedForNonFrameworkApp)
  280.          {
  281.             return;
  282.          }
  283.          initializedForNonFrameworkApp = true;
  284.          if(getLocales().length > 0)
  285.          {
  286.             return;
  287.          }
  288.          var _loc1_:ApplicationDomain = ApplicationDomain.currentDomain;
  289.          if(!_loc1_.hasDefinition("_CompiledResourceBundleInfo"))
  290.          {
  291.             return;
  292.          }
  293.          var _loc2_:Class = Class(_loc1_.getDefinition("_CompiledResourceBundleInfo"));
  294.          var _loc3_:Array = _loc2_.compiledLocales;
  295.          var _loc4_:Array = _loc2_.compiledResourceBundleNames;
  296.          installCompiledResourceBundles(_loc1_,_loc3_,_loc4_);
  297.          localeChain = _loc3_;
  298.       }
  299.       
  300.       [Bindable("change")]
  301.       public function getClass(param1:String, param2:String, param3:String = null) : Class
  302.       {
  303.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  304.          if(!_loc4_)
  305.          {
  306.             return null;
  307.          }
  308.          var _loc5_:* = _loc4_.content[param2];
  309.          return _loc5_ as Class;
  310.       }
  311.       
  312.       [Bindable("change")]
  313.       public function getNumber(param1:String, param2:String, param3:String = null) : Number
  314.       {
  315.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  316.          if(!_loc4_)
  317.          {
  318.             return NaN;
  319.          }
  320.          var _loc5_:* = _loc4_.content[param2];
  321.          return Number(_loc5_);
  322.       }
  323.       
  324.       public function update() : void
  325.       {
  326.          dispatchEvent(new Event(Event.CHANGE));
  327.       }
  328.       
  329.       public function getBundleNamesForLocale(param1:String) : Array
  330.       {
  331.          var _loc3_:String = null;
  332.          var _loc2_:Array = [];
  333.          for(_loc3_ in localeMap[param1])
  334.          {
  335.             _loc2_.push(_loc3_);
  336.          }
  337.          return _loc2_;
  338.       }
  339.       
  340.       public function removeResourceBundle(param1:String, param2:String) : void
  341.       {
  342.          delete localeMap[param1][param2];
  343.          if(getBundleNamesForLocale(param1).length == 0)
  344.          {
  345.             delete localeMap[param1];
  346.          }
  347.       }
  348.       
  349.       public function installCompiledResourceBundles(param1:ApplicationDomain, param2:Array, param3:Array) : void
  350.       {
  351.          var _loc7_:String = null;
  352.          var _loc8_:int = 0;
  353.          var _loc9_:String = null;
  354.          var _loc4_:int = !!param2 ? int(param2.length) : 0;
  355.          var _loc5_:int = !!param3 ? int(param3.length) : 0;
  356.          var _loc6_:int = 0;
  357.          while(_loc6_ < _loc4_)
  358.          {
  359.             _loc7_ = param2[_loc6_];
  360.             _loc8_ = 0;
  361.             while(_loc8_ < _loc5_)
  362.             {
  363.                _loc9_ = param3[_loc8_];
  364.                mx_internal::installCompiledResourceBundle(param1,_loc7_,_loc9_);
  365.                _loc8_++;
  366.             }
  367.             _loc6_++;
  368.          }
  369.       }
  370.       
  371.       public function findResourceBundleWithResource(param1:String, param2:String) : IResourceBundle
  372.       {
  373.          var _loc5_:String = null;
  374.          var _loc6_:Object = null;
  375.          var _loc7_:ResourceBundle = null;
  376.          if(!_localeChain)
  377.          {
  378.             return null;
  379.          }
  380.          var _loc3_:int = int(_localeChain.length);
  381.          var _loc4_:int = 0;
  382.          while(_loc4_ < _loc3_)
  383.          {
  384.             _loc5_ = localeChain[_loc4_];
  385.             _loc6_ = localeMap[_loc5_];
  386.             if(_loc6_)
  387.             {
  388.                _loc7_ = _loc6_[param1];
  389.                if(_loc7_)
  390.                {
  391.                   if(param2 in _loc7_.content)
  392.                   {
  393.                      return _loc7_;
  394.                   }
  395.                }
  396.             }
  397.             _loc4_++;
  398.          }
  399.          return null;
  400.       }
  401.       
  402.       [Bindable("change")]
  403.       public function getUint(param1:String, param2:String, param3:String = null) : uint
  404.       {
  405.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  406.          if(!_loc4_)
  407.          {
  408.             return 0;
  409.          }
  410.          var _loc5_:* = _loc4_.content[param2];
  411.          return uint(_loc5_);
  412.       }
  413.       
  414.       [Bindable("change")]
  415.       public function getBoolean(param1:String, param2:String, param3:String = null) : Boolean
  416.       {
  417.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  418.          if(!_loc4_)
  419.          {
  420.             return false;
  421.          }
  422.          var _loc5_:* = _loc4_.content[param2];
  423.          return String(_loc5_).toLowerCase() == "true";
  424.       }
  425.       
  426.       public function unloadResourceModule(param1:String, param2:Boolean = true) : void
  427.       {
  428.          throw new Error("unloadResourceModule() is not yet implemented.");
  429.       }
  430.    }
  431. }
  432.  
  433. import flash.events.EventDispatcher;
  434. import mx.events.ModuleEvent;
  435. import mx.events.ResourceEvent;
  436. import mx.modules.IModuleInfo;
  437.  
  438. class ResourceModuleInfo
  439. {
  440.    public var resourceModule:IResourceModule;
  441.    
  442.    public var errorHandler:Function;
  443.    
  444.    public var readyHandler:Function;
  445.    
  446.    public var moduleInfo:IModuleInfo;
  447.    
  448.    public function ResourceModuleInfo(param1:IModuleInfo, param2:Function, param3:Function)
  449.    {
  450.       super();
  451.       this.moduleInfo = param1;
  452.       this.readyHandler = param2;
  453.       this.errorHandler = param3;
  454.    }
  455. }
  456.  
  457. class ResourceEventDispatcher extends EventDispatcher
  458. {
  459.    public function ResourceEventDispatcher(param1:IModuleInfo)
  460.    {
  461.       super();
  462.       param1.addEventListener(ModuleEvent.ERROR,moduleInfo_errorHandler,false,0,true);
  463.       param1.addEventListener(ModuleEvent.PROGRESS,moduleInfo_progressHandler,false,0,true);
  464.       param1.addEventListener(ModuleEvent.READY,moduleInfo_readyHandler,false,0,true);
  465.    }
  466.    
  467.    private function moduleInfo_progressHandler(param1:ModuleEvent) : void
  468.    {
  469.       var _loc2_:ResourceEvent = new ResourceEvent(ResourceEvent.PROGRESS,param1.bubbles,param1.cancelable);
  470.       _loc2_.bytesLoaded = param1.bytesLoaded;
  471.       _loc2_.bytesTotal = param1.bytesTotal;
  472.       dispatchEvent(_loc2_);
  473.    }
  474.    
  475.    private function moduleInfo_readyHandler(param1:ModuleEvent) : void
  476.    {
  477.       var _loc2_:ResourceEvent = new ResourceEvent(ResourceEvent.COMPLETE);
  478.       dispatchEvent(_loc2_);
  479.    }
  480.    
  481.    private function moduleInfo_errorHandler(param1:ModuleEvent) : void
  482.    {
  483.       var _loc2_:ResourceEvent = new ResourceEvent(ResourceEvent.ERROR,param1.bubbles,param1.cancelable);
  484.       _loc2_.bytesLoaded = param1.bytesLoaded;
  485.       _loc2_.bytesTotal = param1.bytesTotal;
  486.       _loc2_.errorText = param1.errorText;
  487.       dispatchEvent(_loc2_);
  488.    }
  489. }
  490.